﻿'function' != typeof Object.create &&
  (function () {
    var a = function () {};
    Object.create = function (b) {
      if (1 < arguments.length) throw Error('Second argument not supported');
      if (null === b) throw Error('Cannot set a null [[Prototype]]');
      if ('object' != typeof b) throw TypeError('Argument must be an object');
      a.prototype = b;
      return new a();
    };
  })();
CKEDITOR.plugins.add('toolbarconfiguratorarea', {
  afterInit: function (a) {
    a.addMode('wysiwyg', function (b) {
      var c = CKEDITOR.dom.element.createFromHtml(
        '\x3cdiv class\x3d"cke_wysiwyg_div cke_reset" hidefocus\x3d"true"\x3e\x3c/div\x3e'
      );
      a.ui.space('contents').append(c);
      c = a.editable(c);
      c.detach = CKEDITOR.tools.override(c.detach, function (b) {
        return function () {
          b.apply(this, arguments);
          this.remove();
        };
      });
      a.setData(a.getData(1), b);
      a.fire('contentDom');
    });
    a.dataProcessor.toHtml = function (b) {
      return b;
    };
    a.dataProcessor.toDataFormat = function (b) {
      return b;
    };
  },
});
Object.keys ||
  (Object.keys = (function () {
    var a = Object.prototype.hasOwnProperty,
      b = !{ toString: null }.propertyIsEnumerable('toString'),
      c = 'toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor'.split(
        ' '
      ),
      e = c.length;
    return function (d) {
      if ('object' !== typeof d && ('function' !== typeof d || null === d))
        throw new TypeError('Object.keys called on non-object');
      var g = [],
        f;
      for (f in d) a.call(d, f) && g.push(f);
      if (b) for (f = 0; f < e; f++) a.call(d, c[f]) && g.push(c[f]);
      return g;
    };
  })());
(function () {
  function a(b, c) {
    this.cfg = c || {};
    this.hidden = !1;
    this.editorId = b;
    this.fullToolbarEditor = new ToolbarConfigurator.FullToolbarEditor();
    this.actualConfig = this.originalConfig = this.mainContainer = null;
    this.isEditableVisible = this.waitForReady = !1;
    this.toolbarContainer = null;
    this.toolbarButtons = [];
  }
  ToolbarConfigurator.AbstractToolbarModifier = a;
  a.prototype.setConfig = function (b) {
    this._onInit(void 0, b, !0);
  };
  a.prototype.init = function (b) {
    var c = this;
    this.mainContainer = new CKEDITOR.dom.element('div');
    if (null !== this.fullToolbarEditor.editorInstance)
      throw 'Only one instance of ToolbarModifier is allowed';
    this.editorInstance || this._createEditor(!1);
    this.editorInstance.once('loaded', function () {
      c.fullToolbarEditor.init(function () {
        c._onInit(b);
        if ('function' == typeof c.onRefresh) c.onRefresh();
      }, c.editorInstance.config);
    });
    return this.mainContainer;
  };
  a.prototype._onInit = function (b, c) {
    this.originalConfig = this.editorInstance.config;
    this.actualConfig = c
      ? JSON.parse(c)
      : JSON.parse(JSON.stringify(this.originalConfig));
    if (!this.actualConfig.toolbarGroups && !this.actualConfig.toolbar) {
      for (
        var a = this.actualConfig,
          d = this.editorInstance.toolbar,
          g = [],
          f = d.length,
          k = 0;
        k < f;
        k++
      ) {
        var h = d[k];
        'string' == typeof h
          ? g.push(h)
          : g.push({ name: h.name, groups: h.groups ? h.groups.slice() : [] });
      }
      a.toolbarGroups = g;
    }
    'function' === typeof b && b(this.mainContainer);
  };
  a.prototype._createModifier = function () {
    this.mainContainer.addClass('unselectable');
    this.modifyContainer && this.modifyContainer.remove();
    this.modifyContainer = new CKEDITOR.dom.element('div');
    this.modifyContainer.addClass('toolbarModifier');
    this.mainContainer.append(this.modifyContainer);
    return this.mainContainer;
  };
  a.prototype.getEditableArea = function () {
    return this.editorInstance.container.findOne(
      '#' + this.editorInstance.id + '_contents'
    );
  };
  a.prototype._hideEditable = function () {
    var b = this.getEditableArea();
    this.isEditableVisible = !1;
    this.lastEditableAreaHeight = b.getStyle('height');
    b.setStyle('height', '0');
  };
  a.prototype._showEditable = function () {
    this.isEditableVisible = !0;
    this.getEditableArea().setStyle(
      'height',
      this.lastEditableAreaHeight || 'auto'
    );
  };
  a.prototype._toggleEditable = function () {
    this.isEditableVisible ? this._hideEditable() : this._showEditable();
  };
  a.prototype._refreshEditor = function () {
    function b() {
      c.editorInstance.destroy();
      c._createEditor(!0, c.getActualConfig());
      c.waitForReady = !1;
    }
    var c = this,
      a = this.editorInstance.status;
    this.waitForReady ||
      ('unloaded' == a || 'loaded' == a
        ? ((this.waitForReady = !0),
          this.editorInstance.once(
            'instanceReady',
            function () {
              b();
            },
            this
          ))
        : b());
  };
  a.prototype._createEditor = function (b, c) {
    function e() {}
    var d = this;
    this.editorInstance = CKEDITOR.replace(this.editorId);
    this.editorInstance.on('configLoaded', function () {
      var b = d.editorInstance.config;
      c && CKEDITOR.tools.extend(b, c, !0);
      a.extendPluginsConfig(b);
    });
    this.editorInstance.on(
      'uiSpace',
      function (b) {
        'top' != b.data.space && b.stop();
      },
      null,
      null,
      -999
    );
    this.editorInstance.once('loaded', function () {
      var c = d.editorInstance.ui.instances,
        a;
      for (a in c) c[a] && ((c[a].click = e), (c[a].onClick = e));
      d.isEditableVisible || d._hideEditable();
      d.currentActive &&
        d.currentActive.name &&
        d._highlightGroup(d.currentActive.name);
      d.hidden ? d.hideUI() : d.showUI();
      if (b && 'function' === typeof d.onRefresh) d.onRefresh();
    });
  };
  a.prototype.getActualConfig = function () {
    return JSON.parse(JSON.stringify(this.actualConfig));
  };
  a.prototype._createToolbar = function () {
    if (this.toolbarButtons.length) {
      this.toolbarContainer = new CKEDITOR.dom.element('div');
      this.toolbarContainer.addClass('toolbar');
      for (var b = this.toolbarButtons.length, c = 0; c < b; c += 1)
        this._createToolbarBtn(this.toolbarButtons[c]);
    }
  };
  a.prototype._createToolbarBtn = function (b) {
    var c = ToolbarConfigurator.FullToolbarEditor.createButton(
      'string' === typeof b.text ? b.text : b.text.inactive,
      b.cssClass
    );
    this.toolbarContainer.append(c);
    c.data('group', b.group);
    c.addClass(b.position);
    c.on(
      'click',
      function () {
        b.clickCallback.call(this, c, b);
      },
      this
    );
    return c;
  };
  a.prototype._fixGroups = function (b) {
    b = b.toolbarGroups || [];
    for (var c = b.length, a = 0; a < c; a += 1) {
      var d = b[a];
      '/' == d
        ? ((d = b[a] = {}),
          (d.type = 'separator'),
          (d.name = 'separator' + CKEDITOR.tools.getNextNumber()))
        : ((d.groups = d.groups || []),
          -1 == CKEDITOR.tools.indexOf(d.groups, d.name) &&
            (this.editorInstance.ui.addToolbarGroup(
              d.name,
              d.groups[d.groups.length - 1],
              d.name
            ),
            d.groups.push(d.name)),
          this._fixSubgroups(d));
    }
  };
  a.prototype._fixSubgroups = function (b) {
    b = b.groups;
    for (var c = b.length, a = 0; a < c; a += 1) {
      var d = b[a];
      b[a] = {
        name: d,
        totalBtns: ToolbarConfigurator.ToolbarModifier.getTotalSubGroupButtonsNumber(
          d,
          this.fullToolbarEditor
        ),
      };
    }
  };
  a.stringifyJSONintoOneLine = function (b, a) {
    a = a || {};
    var e = JSON.stringify(b, null, ''),
      e = e.replace(/\n/g, '');
    a.addSpaces &&
      ((e = e.replace(/(\{|:|,|\[|\])/g, function (a) {
        return a + ' ';
      })),
      (e = e.replace(/(\])/g, function (a) {
        return ' ' + a;
      })));
    a.noQuotesOnKey &&
      (e = e.replace(/"(\w*)":/g, function (a, b) {
        return b + ':';
      }));
    a.singleQuotes && (e = e.replace(/\"/g, "'"));
    return e;
  };
  a.prototype.hideUI = function () {
    this.hidden = !0;
    this.mainContainer.hide();
    this.editorInstance.container && this.editorInstance.container.hide();
  };
  a.prototype.showUI = function () {
    this.hidden = !1;
    this.mainContainer.show();
    this.editorInstance.container && this.editorInstance.container.show();
  };
  a.extendPluginsConfig = function (a) {
    var c = a.extraPlugins;
    a.extraPlugins = (c ? c + ',' : '') + 'toolbarconfiguratorarea';
  };
})();
